#include <stdio.h>

int i = 1;  // i 为全局变量，具有静态生存期。

void other(void);   //函数声明

int main(int argc, char const *argv[])
{
    static int a;   // 局部变量，块作用域 , 静态生存期，局部可见。 static 修饰的变量不赋值初始值, 初始值为0 
    int b = -10;    // b为局部变量，块作用域, 动态生存期,局部可见 。
    int c = 0;      // c为局部变量，块作用域, 动态生存期,局部可见 。
    printf("---MAIN---\n");
    printf("i:%d a:%d b:%d c:%d\n", i, a, b, c); // 1,0,-10,0
    c = c + 8;
    other();  // 第一次调用other();  33,4,0,15
    printf("---MAIN---\n");
    printf("i:%d a:%d b:%d c:%d\n", i, a, b, c); // 33,0,-10,8
    i = i + 10;
    other();    // 第二次调用other();  75,6,4,15
    return 0;
}

void other(void)
{
    static int a = 2;   //只第一次进入函数时被初始化。
    static int b;   // static 修饰的变量不赋值初始值, 初始值为0
    // a,b 局部变量，块作用域 , 静态生存期，局部可见。

    int c = 10; // c 局部变量，块作用域 , 动态生存期，局部可见。

    a = a + 2;
    i = i + 32;
    c = c + 5;
    printf("---OTHER---\n");
    printf("i:%d a:%d b:%d c:%d\n", i, a, b, c);
    b = a;
}
